package com.wksc.framework.impexp.pattern;

import com.wksc.framework.impexp.bean.BaseFormatParams;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FormatDatePattern implements FormatPattern {

	private static final long serialVersionUID = 1057446141287933243L;
	//日期类型格式化为字符串的格式
	private String dateFormat = "yyyy-MM-dd HH:mm:ss";
	//日期字符串格式化为日期类型的格式
	private String strDateToDateFormat;
	
	/**
	 * 带参数构造函数,自定义将日期格式化指定的字符串形式
	 * @param dateFormat 日期类型格式化的格式,如:yyyy-MM-dd
	 */
	public FormatDatePattern(String dateFormat) {
		this.dateFormat = dateFormat;
	}
	
	/**
	 * 带参数构造函数,自定义将字符串日期格式化成指定的字符串形式<br>
	 * 注:strDateToDateFormat的格式字符串必须满足日期字符串的格式<br>
	 * 否则会出错!如:日期字符串的值为10:20:35,那么格式化的值不能为yyyy-MM-dd HH:mm:ss<br>
	 * 只能为HH:mm:ss
	 * @param strDateToDateFormat 字符串日期格式化为日期类型的格式
	 * @param dateFormat 日期类型格式化为字符串的格式
	 */
	public FormatDatePattern(String strDateToDateFormat, String dateFormat) {
		this.strDateToDateFormat = strDateToDateFormat;
		this.dateFormat = dateFormat;
	}
	
	/**
	 * 默认的构造函数,要自定义日期的格式化形式<br>
	 * 可使用带参数的构造函数,默认的日期格式为:yyyy-MM-dd HH:mm:ss
	 */
	public FormatDatePattern() {}

	@Override
	public String format(BaseFormatParams params) {
    	if (params==null || params.getCellContent() == null) {
    		return "";
    	}
    	SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
		if(params.getCellContent() instanceof Date){
			return simpleDateFormat.format((Date)params.getCellContent());
		} else {
			try {
				//将日期字符串转换为日期的格式化值不为空
				if (strDateToDateFormat != null) {
					SimpleDateFormat strSimpleDateFormat = new SimpleDateFormat(strDateToDateFormat);
					//先将日期字符串转换为日期类型,再将日期类型根据指定的格式转换为字符串
					return simpleDateFormat.format(strSimpleDateFormat.parse(params.getCellContent().toString()));
				} else {
					return simpleDateFormat.format(simpleDateFormat.parse(params.getCellContent().toString()));
				}
			} catch (ParseException e) {
				return params.getCellContent().toString();
			}
		}
	}
}
